import request from "@/utils/request";

/**
 * 游戏成就
 */
export interface GameAchievement {
  /** 成就ID */
  id: number;
  /** 成就名称 */
  name: string;
  /** 成就描述 */
  description: string;
  /** 成就图标 */
  icon: string;
  /** 是否已解锁 */
  unlocked: boolean;
  /** 解锁时间 */
  unlockedTime?: string;
  /** 关联游戏ID */
  gameId?: number;
  /** 关联游戏名称 */
  gameName?: string;
  /** 成就难度(1-5) */
  difficulty?: number;
}

/**
 * 获取用户解锁的成就列表
 * 
 * @param userId 用户ID（可选）
 * @returns 用户成就列表
 */
export function getUserAchievements(userId?: number) {
  return request<any, GameAchievement[]>({
    url: '/api/v1/game/achievements/user',
    method: 'get',
    params: userId ? { userId } : undefined
  });
}

/**
 * 获取游戏的成就列表
 * 
 * @param gameId 游戏ID
 * @param userId 用户ID（可选）
 * @returns 游戏成就列表
 */
export function getGameAchievements(gameId: number, userId?: number) {
  return request<any, GameAchievement[]>({
    url: `/api/v1/game/achievements/game/${gameId}`,
    method: 'get',
    params: userId ? { userId } : undefined
  });
}

/**
 * 解锁用户成就
 * 
 * @param achievementId 成就ID
 * @param userId 用户ID（可选）
 * @returns 是否解锁成功
 */
export function unlockAchievement(achievementId: number, userId?: number) {
  return request<any, boolean>({
    url: `/api/v1/game/achievements/unlock/${achievementId}`,
    method: 'post',
    params: userId ? { userId } : undefined
  });
}

/**
 * 检查并解锁游戏时长相关成就
 * 
 * @param playTime 游戏时长(秒)
 * @param userId 用户ID（可选）
 * @returns 新解锁的成就
 */
export function checkPlayTimeAchievements(playTime: number, userId?: number) {
  return request<any, GameAchievement[]>({
    url: '/api/v1/game/achievements/check/play-time',
    method: 'post',
    params: {
      playTime,
      userId: userId ?? undefined
    }
  });
}

/**
 * 检查并解锁游戏进度相关成就
 * 
 * @param progress 游戏进度(0-100)
 * @param userId 用户ID（可选）
 * @returns 新解锁的成就
 */
export function checkProgressAchievements(progress: number, userId?: number) {
  return request<any, GameAchievement[]>({
    url: '/api/v1/game/achievements/check/progress',
    method: 'post',
    params: {
      progress,
      userId: userId ?? undefined
    }
  });
} 